package com.yuan.yblog.portal.aop.annotation;

import com.yuan.yblog.portal.enums.LimitType;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

import static java.lang.System.currentTimeMillis;

/**
 * @author hepeiyuan on 2024/5/21 15:49
 * @description 滑动窗口限流注解
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Documented
public @interface SlidingWindowLimiter {
    /**
     * 资源的key,唯一
     * 作用：不同的接口，不同的流量控制
     */
    String key();

    /**
     * 一个窗口可接受访问个数
     */
    int windowSize () ;

    /**
     * 一个窗口覆盖的时间范围，单位：秒
     */
    long windowTimeRange();

    /**
     * 限流类型
     */
    LimitType limitType() default LimitType.DEFAULT;

}

